package com.jims.master.common.utils;

import org.apache.log4j.Logger;

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;

/**
 * Rest统一返回Data处理
 * @author ThinkGem
 * @version 2014-06-25
 */
public class SecurityUtil {

	private static Logger log = Logger.getLogger(SecurityUtil.class);
	
	/**
	 * 加密返回给客户端的参数   目前项目尚为决定加密方式
	 * public enum SerializerFeature {
	    QuoteFieldNames, //序列化输出含引号的字段,默认
	    UseSingleQuotes, //使用单引号而不是双引号序列化
	    WriteMapNullValue, //空值是否输出，默认不输出null
	    WriteEnumUsingToString,Enum输出为枚举值
	    UseISO8601DateFormat, //Date使用ISO8601格式输出日期
	    WriteNullListAsEmpty,//list字段如果为null，输出为[]，而不是null,默认不输出null
	    WriteNullStringAsEmpty,//字符串类型为null,输出""（空串）
	    WriteNullNumberAsZero, //数值字段如果为null，输出为0，而不是null
	    WriteNullBooleanAsFalse, //Boolean字段如果为null，输出为false，而不是null
	    SkipTransientField, //忽略@Transient注解过的字段
	    SortField //按字段名称排序后输出
	  }
	 * @param data
	 * @return
	 */
	/*public static String encryptMsgData(Object data){
		String jsonData = JSONObject.toJSONString(data,SerializerFeature.WriteMapNullValue,SerializerFeature.DisableCircularReferenceDetect);
		jsonData = jsonData.replace(":null", ":\"\"");
		return jsonData;
	}*/

	/**
	 * 非加密返回给客户端的参数
	 * public enum SerializerFeature {
	 QuoteFieldNames, //序列化输出含引号的字段,默认
	 UseSingleQuotes, //使用单引号而不是双引号序列化
	 WriteMapNullValue, //空值是否输出，默认不输出null
	 WriteEnumUsingToString,Enum输出为枚举值
	 UseISO8601DateFormat, //Date使用ISO8601格式输出日期
	 WriteNullListAsEmpty,//list字段如果为null，输出为[]，而不是null,默认不输出null
	 WriteNullStringAsEmpty,//字符串类型为null,输出""（空串）
	 WriteNullNumberAsZero, //数值字段如果为null，输出为0，而不是null
	 WriteNullBooleanAsFalse, //Boolean字段如果为null，输出为false，而不是null
	 SkipTransientField, //忽略@Transient注解过的字段
	 SortField //按字段名称排序后输出
	 }
	 * @param data
	 * @return
	 */
	public static String encryptMsgData(Object data){
		String jsonData = JSONObject.toJSONString(data,SerializerFeature.WriteMapNullValue,SerializerFeature.DisableCircularReferenceDetect,SerializerFeature.IgnoreNonFieldGetter);
		return jsonData;
	}
	
	/**
	 * 过滤参数，防止注入
	 * @param param
	 * @return
	 */
	public static String filterIllegalChar(String param){
		return param.replaceAll(".*([';]+|(--)+).*", " "); 
	}
	
	/**
	 * 检查是否包含非法字符
	 * @param s
	 * @return true-包含 false-不包含
	 */
	public static boolean checkIllegalChar(String s){
		String filterChar = "'|and|or|exec|insert|select|delete|update|count|chr|mid|master|truncate|char|declare|*|%|-|+|=|<|>|;";
		String[] injectArr=filterChar.split("\\|");
		for (int i=0;i<injectArr.length;i++){
			if(s.indexOf(" "+injectArr[i]+" ")>=0){
				return true;
			}
		}
		return false;
	}

}
